import java.util.LinkedList;
import java.util.List;

public class Test{
	
	/**Sturktur:
	 * Transportmittel
	 * 		Params: Grosswild, Anhaengekupplung, Abteile
	 *  -> Anhaenger
	 *  -> Transporter
	 * 
	 * Abteile:
	 * 	-> ZwergschildkroetenTerrarium
	 *  -> WasserlebewesenAbteil
	 *  	-> WassertankAbteil
	 *  	-> WasserLandAbteil
	 *  -> RiesenschildkroetenTerrarium
	 *  -> PythonTerrarium
	 *  -> MambaTerrarium
	 */

	public static void main(String []args){
		ZwergschildkroetenTerrarium zwergschildkroeten = new ZwergschildkroetenTerrarium();
		WassertankAbteil wassertank = new WassertankAbteil(),
						 wassertank2 = new WassertankAbteil(),
						 wassertank3 = new WassertankAbteil();
		WasserLandAbteil wasserland = new WasserLandAbteil();
		RiesenschildkroetenTerrarium riesenschildkroeten = new RiesenschildkroetenTerrarium();
		PythonTerrarium pythont = new PythonTerrarium();
		MambaTerrarium mambat = new MambaTerrarium();
	
		//Verladbare Lebewesen:
		//Meereslebewesen
		Delphin delphin = new Delphin("D");
		Schwertfisch schwertfisch = new Schwertfisch("SF");
		Seehund seehund = new Seehund("SH");
		//Reptilien
		Mamba mamba = new Mamba("M");
		Python python = new Python("P");
		Riesenschildkroete riesenschildkroete = new Riesenschildkroete("RS");
		Zwergschildkroete zwegschildkroete = new Zwergschildkroete("ZS");
		
		System.out.println(delphin+" load in WASSERTANK: "+wassertank.load(delphin));
		System.out.println(seehund+" load in WASSERLAND: "+wasserland.load(seehund));
		System.out.println(python+" load in WASSERTANK: "+wassertank.load(python));
		System.out.println(seehund+" load in WASSERTANK: "+wassertank2.load(seehund));
		System.out.println(schwertfisch+" load in WASSERTANK: "+wassertank3.load(schwertfisch));
		System.out.println(zwegschildkroete+" load in ZWEGSCHILDKROETEN: "+zwergschildkroeten.load(zwegschildkroete));
		System.out.println(riesenschildkroete+" load in RIESENSCHILDKROETEN: "+riesenschildkroeten.load(riesenschildkroete));
		System.out.println(python+" load in PYTHON: "+pythont.load(python));
		System.out.println(mamba+" load in MAMBA: "+mambat.load(mamba));
		
		//Grosswild:
		Elefant elefant1 = new Elefant("E1"),
				elefant2 = new Elefant("E2");
		Giraffe giraffe1 = new Giraffe("G1"),
				giraffe2 = new Giraffe("G2"),
				giraffe3 = new Giraffe("G3");
		
		List<Grosswild> grosswild1 = new LinkedList<Grosswild>(),
						grosswild2 = new LinkedList<Grosswild>();

		grosswild1.add(elefant1);
		grosswild1.add(giraffe1);
		grosswild1.add(giraffe2);
		
		grosswild2.add(elefant2);
		grosswild2.add(giraffe3);

		Transporter.HelperListKupplung kupplunglist1 = new Transporter.HelperListKupplung(),
							   		   kupplunglist2 = new Transporter.HelperListKupplung(),
							   		   kupplunglist3 = new Transporter.HelperListKupplung();
		
		kupplunglist1.add(new Anhaengekupplung());
		kupplunglist1.add(new Anhaengekupplung());
		
		kupplunglist2.add(new Anhaengekupplung());
		kupplunglist2.add(new Anhaengekupplung());
		kupplunglist2.add(new Anhaengekupplung());
		
		kupplunglist3.add(new Anhaengekupplung());
		kupplunglist3.add(new Anhaengekupplung());
		kupplunglist3.add(new Anhaengekupplung());
		
		List<Abteil> abteil1 = new LinkedList<Abteil>(),
					 abteil2 = new LinkedList<Abteil>(),
					 abteil3 = new LinkedList<Abteil>();
		
		abteil1.add(zwergschildkroeten);
		abteil1.add(riesenschildkroeten);
		
		abteil2.add(wasserland);
		abteil2.add(wassertank);
		abteil2.add(wassertank3);
		
		abteil3.add(mambat);
		abteil3.add(pythont);
		abteil3.add(wassertank2);
		
		Anhaenger haenger1 = new Anhaenger(new LinkedList<Grosswild>(),kupplunglist1, null),
				  haenger2 = new Anhaenger(grosswild1, new Transporter.HelperListKupplung(), abteil1);
		
		Transporter transporter1 = new Transporter(grosswild2, kupplunglist2, abteil2),
					transporter2 = new Transporter(new LinkedList<Grosswild>(), new Transporter.HelperListKupplung(), new LinkedList<Abteil>()),
					transporter3 = new Transporter(new LinkedList<Grosswild>(), kupplunglist3, abteil3);
		
		System.out.println("Kann Haenger1 laden: "+transporter1.load(haenger1));
		System.out.println("Kann Haenger1 laden (wurde bereits geladen, nicht moeglich): "+transporter1.load(haenger1));
		System.out.println("Kann Haenger2 laden (zu wenig Kupplungen): "+transporter2.load(haenger2));
		System.out.println("Kann Haenger2 laden (hat genug Kupplungen): "+transporter3.load(haenger2));
		
		System.out.println();
		System.out.println("Listen der Transporter:");
		for(Tier t :transporter1.list()){
			System.out.println("Transporter 1: "+t);
		}
		for(Tier t :transporter2.list()){
			System.out.println("Transporter 2: "+t);
		}
		for(Tier t :transporter3.list()){
			System.out.println("Transporter 3: "+t);
		}
		
		System.out.println();
		System.out.println("Unloading...");
		
		System.out.println("Unload WASSERTANK: "+wassertank.unload());
		System.out.println("Unload WASSERLAND: "+wasserland.unload());
		System.out.println("Unload WASSERTANK3: "+wassertank3.unload());
		System.out.println("Unload RIESENSCHILDKROETEN: "+riesenschildkroeten.unload());
		System.out.println("Unload PYTHON: "+pythont.unload());
		
		System.out.println();
		System.out.println("Listen der Transporter NACH Unload:");
		for(Tier t :transporter1.list()){
			System.out.println("Transporter 1: "+t);
		}
		for(Tier t :transporter2.list()){
			System.out.println("Transporter 2: "+t);
		}
		for(Tier t :transporter3.list()){
			System.out.println("Transporter 3: "+t);
		}
		
		System.out.println("Unload WASSERTANK: "+wassertank.unload()+" (ist bereits leer)");
	}

}